﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 常用系统API
{
    /// <summary>
    /// String 类型常用Api
    /// </summary>
    internal class String_Api
    {
        public void test()
        {
            string str = "     aaaadddd    ";
            string str1 = ",2313,";
            string str2 = "aaa";
            //去除左右两边的空格
            string aa = str.Trim();

            //去除开头的空格
            string bb = str.TrimStart();

            //去除结尾的空格
            string cc = str.TrimEnd();

            //去除特殊字符
            string dd = str1.Trim(',');//两头的特殊字符
            string ee = str1.TrimEnd(',');//结尾的特殊字符
            string ff = str1.TrimStart(',');//开头的特殊字符

            //获取长度
            int length = str.Length;//长度属性

            //返回整数，得到指定的字符串在原字符串中第一次出现的位置
            int index = str.IndexOf(str2);

            //返回整数，得到指定的字符串在原字符串中最后一次出现的位置
            int lastIndex = str.LastIndexOf(str2);

            //返回布尔型的值，判断某个字符串是否以指定的字符串开头
            bool startWith = str.StartsWith(str2);

            //返回布尔型的值，判断某个字符串是否以指定的字符串结尾
            bool endWith = str.EndsWith(str2);

            //转小写
            string lowerStr = str.ToLower();

            //转大写
            string upperStr = str.ToUpper();

            //返回一个新的字符串，将字符串中指定位置的字符串移除
            string removeStr = str.Remove(5);//从第5个索引开始向后删除，然后返回移除后的字符串
            //重载
            string removeStr1 = str.Remove(5, 1);//从第5个索引位置开始删除，累计删除1个字符


            //左填充
            string leftPad = str.PadLeft(100, '0');//左填充，填充后总长度100,填充字符'0',不写第二个参数情况下默认填充空格

            //右填充
            string rightPad = str.PadRight(100, '0');//右填充，填充后总长度100，以字符'0'填充，不写第二参数情况下默认填充空格

            //字符串分割,返回字符串数组
            string str3 = "ada|dafd|dafad";
            string[] strings = str3.Split('|');//以字符分割
            string[] strings1 = str3.Split("||");//以给定字符串分割

            //替换
            string strReplaced = str.Replace("aa", "hha");//替换用第二个参数的字符串替换第一个参数的字符串，将替换完的返回


            //字符串截取
            string subStr = str.Substring(5);//从第五个索引位置向后截取，到末尾
            string subStr1 = str.Substring(5, 10);//从第五个索引位置开始向后截取10个字符

            //向字符串中插入
            string insertStr = str.Insert(5, "888");//在第五个索引位置后面插入"888"

            //获取子字符串所在位置(索引)



        }

        /// <summary>
        /// StringBulder可变字符串
        /// String不可变，在于为期分配的内存，一旦分配，内存位中的内容不可变，可以改变字符串变量的内存指向，但不能改变已经实例化的字符串对象的内容
        /// StringBulider可变，在于其实例所在内存的内容是可变的。
        /// </summary>
        public void test2()
        {
                //            对于执行大量字符串操作的例程(例如在循环中多次修改字符串的应用程序) ，重复修改字符串可能会
                //显著降低性能。 替代方法是使用 StringBuilder ，它是一个可变字符串类。 可变性是指在创建类的实例
                //后，可以通过追加、移除、替换或插入字符来修改它。 StringBuilder对象维护缓冲区以容纳对字符串
                //的扩展。 如果空间可用，则会将新数据追加到缓冲区; 否则，将分配一个新的更大的缓冲区，将原始缓
                //冲区中的数据复制到新缓冲区，然后将新数据追加到新缓冲区
                StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("basa").Append("aaa").Append("dada");//这种写法为链式编程


        }
    }
}
